<html>
<head></head>
<body><a name="ZH-CN_TOPIC_0000002313462737"></a><a name="ZH-CN_TOPIC_0000002313462737"></a>
<h1>ArkTS线程间通信概述</h1>
<div><p>
    线程间通信指的是并发多线程间存在的数据交换行为。由于ArkTS语言兼容TS/JS，其运行时的实现与其它所有的JS引擎一样，都是基于Actor内存隔离的并发模型提供并发能力。</p>
    <p>
        在ArkTS线程间通信中，不同数据对象的行为存在差异。例如，普通JS对象、ArrayBuffer对象和SharedArrayBuffer对象在跨线程时的行为不一致，包括序列化和反序列化、数据转移和数据共享等操作。</p>
    <p>以JS对象为例，其在并发任务间的通信采用了标准的Structured
        Clone算法（序列化和反序列化）。该算法通过序列化将JS对象转换为与引擎无关的数据（如字符串或内存块），在另一个并发实例中通过反序列化还原成与原JS对象内容一致的新对象。因此，需要进行深拷贝，效率较低。除了支持JS标准的序列化和反序列化能力，还支持绑定Native的JS对象的传输，以及<a
                href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-sendable">Sendable对象</a>的共享能力。
    </p>
    <p>ArkTS目前主要提供两种并发能力支持线程间通信：TaskPool和Worker。</p>
    <ul>
        <li><p>Worker是Actor并发模型标准的跨线程通信API，与Web Worker或者Node.js Worker的使用方式基本一致。</p></li>
        <li><p>TaskPool提供了功能更强、并发编程更简易的任务池API。其中TaskPool涉及跨并发实例的对象传递行为与Worker一致，还是采用了标准的Structured
            Clone算法，并发通信的对象越大，耗时就越长。</p></li>
    </ul>
    <p>基于ArkTS提供的TaskPool和Worker并发接口，支持多种线程间通信能力，可以满足开发者的不同<a
            href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/independent-time-consuming-task">线程间通信场景</a>。如独立的耗时任务、多个耗时任务、TaskPool线程与宿主线程通信、Worker线程与宿主线程的异步通信、Worker同步调用宿主线程的接口等。同时，基于<a
            href="https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/napi-introduction">Node-API</a>提供的机制，C++线程可以跨线程调用ArkTS接口。
    </p>
    <p>图1 序列化反序列化原理图</p>
    <p><span><img originheight="258" originwidth="706"
                  src="https://communityfile-drcn.op.dbankcloud.cn/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20250704161535.65373658273403550456369139520662:50001231000000:2800:C532055DE43C129CBC7482B2323D03D5A12EE9971E930AAD1BE388279ECC11F5.png"></span>
    </p></div>
<div></div>
</body>
</html>